# 实例一
class B:
    def __init__(self, value=0):
        self.value = value

class A:
    def process(self, data: B):
        # 直接操作B对象的属性
        data.value += 10

b = B(5)
a = A()
a.process(b)
print(b.value)

# 实例二
from abc import ABC, abstractmethod

class IData(ABC):
    @abstractmethod
    def get_value(self) -> int:
        pass

    @abstractmethod
    def set_value(self, value: int):
        pass

class B(IData):
    def __init__(self, value=0):
        self._value = value

    def get_value(self) -> int:
        return self._value

    def set_value(self, value: int):
        self._value = value

class A:
    def process(self, data: IData):
        # 通过协议操作数据对象的属性
        data.set_value(data.get_value() + 10)

b = B(5)
a = A()
a.process(b)
print(b.get_value())  # 输出15

# 实例三
from abc import ABC, abstractmethod

class IData(ABC):
    @abstractmethod
    def get_value(self) -> int:
        pass

    @abstractmethod
    def set_value(self, value: int):
        pass

class B(IData):
    def __init__(self, value=0):
        self._value = value

    def get_value(self) -> int:
        return self._value

    def set_value(self, value: int):
        self._value = value

class A:
    def __init__(self, data: IData):
        self._data = data

    def process(self):
        # 通过注入的依赖操作数据对象的属性
        self._data.set_value(self._data.get_value() + 10)

b = B(5)
a = A(b)
a.process()
print(b.get_value())  # 输出15
